package cn.goktech.oss.service.imp;

import cn.goktech.oss.service.IAvatarService;
import cn.goktech.oss.util.BaseUtil;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.CannedAccessControlList;
import org.joda.time.DateTime;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.io.InputStream;
import java.util.UUID;

@Component
public class AvatarServiceImp implements IAvatarService {
    @Override
    public String avatarUpload(MultipartFile file) {

        //OSS操作所需的相关配置
        String endpoint = BaseUtil.END_POINT;
        // 阿里云主账号AccessKey拥有所有API的访问权限，风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维，请登录 https://ram.console.aliyun.com 创建RAM账号。
        String accessKeyId = BaseUtil.KEY_ID;
        String accessKeySecret = BaseUtil.KEY_SECRET;
        String bucketName = BaseUtil.BUCKET_NAME;

        //构建图片唯一地址
        //1.获取当前系统时间
        String dataTime = new DateTime().toString("yyyy/MM/dd");

        //2.添加至文件夹
        String dir = BaseUtil.AVATAR_DIR;
        //3.获取文件全名
        String  fileName = "";
        if(file!=null){
            fileName  = file.getOriginalFilename();
        }
        //4.构建图片唯一地址
        String path = dir+"/"+dataTime+ UUID.randomUUID().toString()+fileName;


        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        ossClient.setBucketAcl(bucketName, CannedAccessControlList.PublicRead);
        // 创建PutObjectRequest对象。
        InputStream fis = null;
        // 上传文件。
        try {
            fis = file.getInputStream();
        } catch (IOException e) {
            e.printStackTrace();
        }

        ossClient.putObject(bucketName,path,fis);
        // 关闭OSSClient。
        ossClient.shutdown();
        return "http://" + bucketName + "." + endpoint + "/" +path;
    }
}
